1. 更快速的交付部署
Docker讓自己在整個開發期間都能快速交付,允許裝有應用服務本地容器做開發後直接整合至持續開發流程之中。如:開發者用一個標準鏡像構建一套容器,當開發完成後運維人員可直接用此容器部署代碼。
另外Docker可快速創建容器,疊代應用程式讓整個過程更為透明,使團隊中其他成員更容易理解應用程式如何創建 Job。而這整個佈建整合過程資源佔用極小,啟動時間屬秒級,故可讓開發、測試與部署時間利用率更好。
2. 高效部署與資源擴展
可在超過 90% 任意平台上運行 Docker 容器,無論是實體伺服器、虛擬機、公有雲、私有雲、個人電腦等... 極高的相容性可讓工程人員把一個應用程式從A平台直接遷移到B平台。
而就是輕量化與高相容的特性可以更容易實踐動態負載管理 ,當提前達到偵測的臨界值則更快做到資源擴展讓應用服務仍維持一致的高校穩定性。
3. 更高資源利用率
Docker 對系統資源的利用率極高,當一台伺服器可同時運行數百至數千個 Docker 容器。容器本身除了運行其中的應用外,不太消耗多餘系統資源讓資源專注在執行的容器應用本身,相較紅遍超過十年以上的虛擬機相比,
假設運行20個不同的應用可能就會需要1:1的二十台 VM,而Docker就只需啟動二十個隔離的容器應用即可。
4.更簡單來做管理
透過Docker只需一個小小的修改就可以替代過往需要大量更新的工作。而且所有變更的地方都會以增量方式來做分發和更新,而最後達到實現自動化的一個高效管理的過程。
最後來個很生硬的工程師容器總結:
Docker是本身不帶入作業系統,故每次呈現的應用服務非常輕量。
調用伺服器宿主的 CPU、RAM 或 Disk等這常態性資源以調用記憶體資源為例:
VM是利用Hypervisor來做虛擬記憶體,整個調用過程虛擬記憶體->虛擬物理記憶體->實體記憶體,
但Docker利用Docker Engine調用宿主資源過程就只有虛擬記憶體->實體記憶體,就兩層讓中間轉換與居中協調的過程變更簡易,距離更短,進而讓效率極大化。
K8s主要帶給敏捷開發運帷最深遠的優勢:
1. 面向當下的各類基礎設施框架
從古至今,開發人員在面對多種作業系統環境編寫應用程式,而至今還包含從企業內伺服器、虛擬化私有雲再到AWS / Azure / GCP等公有雲中。
從傳統角度來說,應用程式與開發工具一直都需要與其底層基礎建設耦合性極高。雖然這種方式確實相容性極高,但方式的部署模型成本也隨之提升。這簡單說就是應用程式非常高度依賴於特定環境,包括像是網路,後端存儲依賴性或是雲服務商專用編程技術等...
K8s透過為容器提供核心功能但又無須強制限制作業基礎建設平台。包含像是裡面極具代表性的Pods,Services等...
2. 模組化架構提升管理效果
容器技術允許各應用程式拆解更小的單位。抽象層級讓映像容器本身各自獨立並允許設計者從原生角度重新思考如何建構分佈型應用程式。
而這種模組化方法亦使開發者著眼於小處、更專注實現更細膩的功能開發上,讓團隊成員各自負責特定容器功能即可,更容易加以優化調校。
但這一切並不能單純通過容器技術實現,還需要配合一套用於對這些模塊化組件加以集成與編排的系統。Kubernetes利用Pods機制實現這一目標。
3. 實現軟體的規模化部署與更新
Devops是當前加速軟體構建、整合測試部署的一個新興方法。將團隊從管理基礎建設轉向到軟體的規模化管理部署與更新工作。K8s在這方面就展現出更好的優勢,讓IT人員能更輕易管理整個應用程式生命周期。以下有幾個重要的服務簡述如透過部署控制服務來簡化多種複雜的管理任務。
4. 為雲原生應用奠定基礎
當前容器技術有越來越多管理與編排工具如雨春筍展開。目前常見方案包括:Apache Mesos with Marathon、Docker Swarm、AWS Container Service等....
當然各類方案皆擁有自己的特色與優勢。Docker Swarm能夠與Docker運行時緊密對接,幫助用戶更輕鬆地由Docker過渡至Swarm;Mesos with Marathon不限於容器範圍,而AWS ECS可供AWS用戶輕鬆存取。
K8s叢集可運行在EC2之上,並與AWS旗下的各類服務對接,具體包括Amazon EBS、ELB、Auto Scaling等...當然公有雲還有Google Cloud,Azure,阿里雲等等...都有個別公有雲體系但都支援著K8s,憑藉著自身架構、創新成果以及龐大的開源技術社區等優勢,讓K8s仍然保持著極高人氣。
最後來個工程師旁觀著的容器編程總結:
K8s的出現允許開發者充分滿足現代化軟體開發要求。原來缺少K8s的情況下,開發團隊常被迫自行編寫軟體部署、擴展及更新工作。部分企業甚至會建立大型團隊單獨處理單一任務。
K8s可以能夠幫助我們充分發揮容器技術的既有優勢,同時構建起能夠在任意環境下運行的雲原生應用程式,而不再需要受限於各自雲平台的專屬要求。